home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / basic / pbtool.exe / CONVERT.BAS < prev    next >
BASIC Source File  |  1991-11-11  |  5KB  |  153 lines

  1. '     PROGRAM: CONVERT.BAS      PROGRAMMER: ANDY KELLETT 04/19/91
  2. '     DATE-WRITTEN: 04/19/91    USING POWER BASIC v2.00
  3. '     THIS PROGRAM CONVERTS SPECIFIED CHARACTERS IN A FILE AND WRITES
  4. '     A NEW FILE TO DISK.
  5. '     UPDATE: WORKS WITH LARGER CHUNKS OF DATA FOR MUCHO SPEEDO.
  6. '     Last Updated: 11/11/91
  7. '--------------------------------------------------------------------
  8. $INCLUDE "CHARS.INC"
  9. BUF.SIZE% = 4000
  10. CLS
  11. LOCATE 1,1:PRINT  "         ┌──────────────────────────────────────────────────────────────┐"
  12. LOCATE 2,1:PRINT  "         │   THIS PROGRAM ALLOWS YOU TO CONVERT CHARACTERS IN A FILE.   │"
  13. LOCATE 3,1:PRINT  "         │   IF YOU WANT TO CONVERT ALL LINE-FEEDS (ASCII 10) TO A      │"
  14. LOCATE 4,1:PRINT  "         │   SPACE (ASCII 32) SIMPLY SPECIFY 10 AS THE ASCII VALUE      │"
  15. LOCATE 5,1:PRINT  "         │   OF THE OLD CHARACTER AND 32 AS THE ASCII VALUE OF THE      │"
  16. LOCATE 6,1:PRINT  "         │   NEW CHARACTER.  ALL OCCURANCES OF LINE-FEED CHARACTERS     │"
  17. LOCATE 7,1:PRINT  "         │   WILL BE CONVERTED TO SPACES.  TO EXIT WITHOUT DOING        │"
  18. LOCATE 8,1:PRINT  "         │   ANYTHING, SIMPLY USE A NON-EXISTANT FILE NAME FOR THE      │"
  19. LOCATE 9,1:PRINT  "         │   INPUT FILE OR AN EXISTING ONE FOR THE OUTPUT FILE.         │"
  20. LOCATE 10,1:PRINT "         └──────────────────────────────────────────────────────────────┘"
  21.  
  22. CLS
  23. locate 1,25:print "Convert  -  A. KELLETT"
  24. LOCATE 2,15:PRINT "THIS PROGRAM CONVERTS SPECIFIED CHARACTERS FROM A FILE."
  25. GOSUB FILEEXISTS
  26.  
  27. GOSUB GETCHARS
  28.  
  29. IF FILE1EOF& => BUF.SIZE% THEN
  30.    BUF.LEN& = BUF.SIZE%
  31. ELSE
  32.    BUF.LEN& = FILE1EOF&
  33. END IF
  34.  
  35. '*** OPEN BOTH FILES, READ & PROCESS & WRITE, CLOSE BOTH FILES ***
  36. LOCATE 14,5:PRINT "WORKING ON BYTE: "
  37. OPEN FILENAME1$ FOR BINARY AS #1
  38. OPEN FILENAME2$ FOR BINARY AS #2
  39.    QUITFLAG% = 0
  40.    WHILE QUITFLAG% = 0
  41.       GET$ 1, BUF.LEN&, IN.BUFFER$
  42.       FOR I% = 1 TO LEN(IN.BUFFER$)
  43.          IF MID$(IN.BUFFER$, I%, 1) = CHAR.STRIP$ THEN
  44.             MID$(IN.BUFFER$, I%, 1) = CHAR.REPLACE$
  45.          END IF
  46.       NEXT I%
  47.       PUT$ 2, IN.BUFFER$
  48.       BYTES.READ& = BYTES.READ& + BUF.LEN&
  49.       LOCATE 14, 22:PRINT USING "###,###";BYTES.READ&
  50.       IF BYTES.READ& => FILE1EOF& THEN
  51.          QUITFLAG% = 1
  52.       ELSE
  53.          IF FILE1EOF& - BYTES.READ& < BUF.LEN& THEN
  54.             BUF.LEN& = FILE1EOF& - BYTES.READ& :REM** READ IN LEFTOVER BYTES **
  55.          END IF
  56.       END IF
  57.    WEND
  58. CLOSE #2:CLOSE #1
  59. LOCATE 16,10:PRINT "PROGRAM COMPLETED"
  60.  
  61. END
  62. '
  63. '
  64. '----------------------------------------------------------
  65. FILEEXISTS:
  66.    LOCATE 5,5:INPUT "NAME OF INPUT FILE: ";FILENAME1$
  67.  
  68.    IF FILENAME1$ = "" THEN
  69.       PRINT "YOU MUST ENTER A FILE NAME -- PROGRAM ENDING. "
  70.       END
  71.    END IF
  72.    '*** CHECK VALIDITY OF INPUT FILE NAME ***
  73.    OPEN FILENAME1$ FOR BINARY AS #1
  74.       IF LOF(1) < 1 THEN
  75.          PRINT "THE INPUT FILE DOES NOT EXISTS."
  76.          CLOSE #1
  77.          KILL FILENAME1$
  78.          DELAY 2.5
  79.          LOCATE 22,1
  80.          END
  81.       END IF
  82.       FILE1EOF& = LOF(1)
  83.    CLOSE #1
  84.    LOCATE 6,5:INPUT "NAME OF OUTPUT FILE: ";FILENAME2$
  85.    '*** CHECK VALIDITY OF OUTPUT FILE NAME ***
  86.    OPEN FILENAME2$ FOR BINARY AS #2
  87.       IF LOF(2) > 1 THEN
  88.          PRINT "THE OUTPUT FILE ALREADY EXISTS."
  89.          CLOSE #2
  90.          KILL FILENAME2$
  91.          DELAY 2.5
  92.          LOCATE 22,1
  93.          END
  94.       END IF
  95.    CLOSE #2
  96.  
  97. RETURN
  98. '
  99. '
  100. '----------------------------------------------------------
  101. GETCHARS:
  102.    '---- GET CHARACTER USER WISHES TO REPLACE ----
  103.    TYPECHAR$ = ""
  104.    DO
  105.       LOCATE 7,5:PRINT "ENTER OLD (C)HARACTER  OR (A)SCII VALUE: ";
  106.       INPUT TYPECHAR$
  107.       TYPECHAR$ = UCASE$(TYPECHAR$)
  108.    LOOP UNTIL (TYPECHAR$ = "C") OR (TYPECHAR$ = "A")
  109.    IF TYPECHAR$ = "C" THEN
  110.       INSTRING$ = ""
  111.       LOCATE 8,5:PRINT "ENTER CHARACTER: "
  112.       CALL GETCHAR(8,23,1,NORMAL$)
  113.       CHAR.STRIP$ = INSTRING$
  114.    ELSE
  115.       INSTRING$ = ""
  116.       LOCATE 8,5:PRINT "ENTER VALUE (0 - 255)"
  117.       CALL GETCHAR(8,27,3,NUMBER$)
  118.       IF VAL(INSTRING$) > 255 THEN
  119.          LOCATE 10,5:PRINT "ASCII VALUE CANNOT BE OVER 255!"
  120.          END
  121.       END IF
  122.       CHARSTRIPNUM = VAL(INSTRING$)
  123.       CHAR.STRIP$ = CHR$(CHARSTRIPNUM)
  124.    END IF
  125.  
  126.    '---- GET CHARACTER TO REPLACE WITH ----
  127.    TYPECHAR$ = ""
  128.    DO
  129.      LOCATE 9,5:PRINT "ENTER NEW (C)HARACTER  OR (A)SCII VALUE: ";
  130.      INPUT TYPECHAR$
  131.      TYPECHAR$ = UCASE$(TYPECHAR$)
  132.    LOOP UNTIL (TYPECHAR$ = "C") OR (TYPECHAR$ = "A")
  133.    IF TYPECHAR$ = "C" THEN
  134.       INSTRING$ = ""
  135.       LOCATE 10,5:PRINT "ENTER CHARACTER: "
  136.       CALL GETCHAR(10,23,1,NORMAL$)
  137.       CHAR.REPLACE$ = INSTRING$
  138.    ELSE
  139.       INSTRING$ = ""
  140.       LOCATE 10,5:PRINT "ENTER VALUE (0 - 255)"
  141.       CALL GETCHAR(10,27,3,NUMBER$)
  142.       IF VAL(INSTRING$) > 255 THEN
  143.          LOCATE 11,5:PRINT "ASCII VALUE CANNOT BE OVER 255!"
  144.          END
  145.       END IF
  146.       CHARREPLACENUM = VAL(INSTRING$)
  147.       CHAR.REPLACE$ = CHR$(CHARREPLACENUM)
  148.   END IF
  149.  
  150. RETURN
  151.  
  152. $INCLUDE "GETCHAR.INC"
  153.